# (1)	创建父类
# ①	创建类Hero（添加属性country，author，booktitle）
class Hero(object):
    country = '中国'
    author = '曹雪芹'
    booktitle = '斗破苍穹'

    # ②	创建构造方法（name，保存英雄名，默认值为空字符串；level，保存英雄等级，默认值为‘斗之气一段’；
    # relation，保存和当前英雄相关角色，列表类型，保存相关角色字符串）
    def __init__(self, relation, name='', level='斗之气一段'):
        self.relation = relation
        self.name = name
        self.level = level

    # ③	添加打印方法show，在输出的对象是，显示当前英雄角色和完整信息，格式如下：
    # 图书名：作者，英雄角色-等级
    def __str__(self):
        return f'图书名：{self.booktitle} 作者{self.author}，英雄角色{self.name}-等级{self.level}'

    # ④	分别添加设置和获取属性name，level，relation的方法
    def get_name(self):
        return self.name

    def get_level(self):
        return self.level

    def get_relation(self):
        return self.relation

    def set_name(self, name):
        self.name = name

    def set_level(self, level):
        self.level = level

    def set_relation(self, relation):
        self.relation = relation

    # ⑤	添加info方法输出当前相关信息
    # 格式如下：
    # 图书作者—英雄角色—等级
    def info(self):
        print(f'图书作者{self.author}—英雄角色{self.name}—等级{self.level}')


# (2)	创建子类
# ①	创建SuperHero类，继承自Hero，添加“斗圣“英雄相关技能
class SuperHero(Hero):

    # （（1）greatAngry，对象方法，被调用时，输出“佛怒火莲”到终端。
    def greatAngry(self):
        print('佛怒火莲')

    # （2）greatThunder，对象方法，被调用时，输出“三千雷动”到终端。
    def greatThunder(self):
        print('三千雷动')

    # （3）greatShock，对象方法，被调用时，输出“八极崩”到终端。
    def greatShock(self):
        print('八极崩')

    # （4）ghostFire，对象方法，被调用时，输出“异火掌”。）
    def ghostFire(self):
        print('异火掌')


# ②	创建FinalHero类，继承自SuperHero类，添加“斗帝”英雄相关技能：
class FinalHero(SuperHero):

    # ③	重写父类方法ghostFire，对象方法，输出“异火归位，万物寂灭”到终端。
    def ghostFire(self):
        print('异火归位，万物寂灭')

    # ④	重写父类方法greatShock，对象方法，输出“帝印决”到终端。
    def greatShock(self):
        print('帝印决')

    # ⑤	noBody，对象方法，输出“金刚琉璃体”到终端。
    def noBody(self):
        print('金刚琉璃体')


# (3)	添加如程序入口
if '__main__' == __name__:

    # ①	创建SuperHero子类对象，fnHero，修改对象的所有对象属性。
    # 1)	添加角色姓名，“萧炎”。
    # 2)	添加角色等级，“9星斗帝”。
    fnHero = SuperHero([], '萧炎', '9星斗帝')
    fnHero.set_name('萧炎2')
    fnHero.set_level('Lv10')
    fnHero.set_relation(['r1', 'r2'])

    # ②	通过对象方法获得对象的所有属性值，并显示。
    print(fnHero.get_name())
    print(fnHero.get_level())
    print(fnHero.get_relation())

    # 调用info显示对象信息
    fnHero.info()

    # 调用子类对象所有函数
    fnHero.greatAngry()
    fnHero.greatThunder()
    fnHero.greatShock()
    fnHero.ghostFire()
